home *** CD-ROM | disk | FTP | other *** search
/ Introducing the New Way to Shop from Home / Iceland.iso / pc / internetaccess.dir / 00025_Script_Jump to Movie Button < prev    next >
Text File  |  2003-03-05  |  12KB  |  326 lines

  1. -- DESCRIPTION --
  2.  
  3. on getBehaviorDescription me
  4.   return \
  5.     "JUMP TO MOVIE BUTTON" & RETURN & RETURN & \
  6.     "A click on the sprite makes the playback head jump to any other movie available to your system. " & \
  7.     "An optional marker name can be used to jump to a precise point in the new movie. " & \
  8.     "(Use the 'Jump to Marker Button' behavior to jump to a marker in the current movie)." & RETURN & RETURN & \
  9.     "In order to make use of the Play and Return option, place a Play Done command in the destination movie." & RETURN & RETURN & \
  10.     "This behavior is designed for use with the 'Jump Back Button'. " & \
  11.     "You can set it to record the movie name and the frame number of the current marker so that the 'Jump Back Button' can subsequently return. " & \
  12.     "NOTE: This feature relies on a global variable: gNavigationButtonList." & RETURN & RETURN & \
  13.     "PERMITTED MEMBER TYPES" & RETURN & \
  14.     "Graphic members" & RETURN & RETURN & \
  15.     "PARAMETERS:" & RETURN & \
  16.     "* Movie to jump to" & RETURN & RETURN & \
  17.     "If the target movie is in the same folder as the current movie then you need only enter the name of the movie. " & \
  18.     "If the movie is in a different folder, then enter the full or relative path name to the target movie." & RETURN & RETURN & \
  19.     "* Marker to jump to in the new movie (optional)" & RETURN & \
  20.     "* 'Go to' or 'Play and return'?" & RETURN & \
  21.     "* Remember current marker for Back button?" & RETURN & RETURN & \
  22.     "Select 'Remember current marker for Back button' to ensure that the behavior 'remembers' which markers have already been visited." & RETURN & RETURN & \
  23.     "Use the associated 'Jump Back Button' behavior on a separate sprite to return to visited movies in reverse order." & RETURN & RETURN & \
  24.     "ASSOCIATED BEHAVIORS:" & RETURN & \
  25.     "+ Jump to Marker Button" & RETURN & \
  26.     "+ Jump Back Button" & RETURN & \
  27.     "+ Jump Forward Button" & RETURN & \
  28.     "+ Push Button (to alter rollover / mouseDown states)"
  29. end getBehaviorDescription
  30.  
  31.  
  32. on getBehaviorTooltip me
  33.   return \
  34.     "Use with graphic members." & RETURN & RETURN & \
  35.     "Jumps to a specified movie on mouseUp." & RETURN & RETURN & \
  36.     "Use this behavior with the 'Jump Back Button' to allow the user to return to visited movies."
  37. end getBehaviorTooltip
  38.  
  39.  
  40.  
  41.  
  42. -- NOTES FOR DEVELOPERS --
  43.  
  44. -- The main handler is Jump, which is triggered by mouseUp.  The Initialize
  45. -- handler prepares for the case where you have chosen a marker name for the
  46. -- distant movie, and this marker does not in fact exist.  It also checks if
  47. -- the global gNavigationButtonList has a valid structure (if necessary), or
  48. -- warns you if you did not select a movie when you first attached the 
  49. -- behavior.
  50.  
  51. -- USE OF 'BACK/FORWARD BUTTON' BEHAVIORS
  52. -- Information about what markers have already been visited is stored in a
  53. -- global variable: gNavigationButtonList.  As a global, this variable is
  54. -- available to all navigation behaviors, on any sprite in any movie.
  55. --
  56. -- gNavigationButtonList has the following structure:
  57. --   [#stack [...], #index: [...], #forward: [...]]
  58. -- Each of the subLists has the structure:
  59. --   [[#frame: <integer>, #movie: <movieName>], [...]]
  60. --
  61. -- #index is not currently exploited.  It provides a list of all markers
  62. -- visited, in the order of their first visit.  It could be used to create
  63. -- a pop-up menu, or to check if a player had visited a particular scene.
  64. --
  65. -- Information concerning the most recently visited marker is stored in the
  66. -- last item of the #stack list.  This item is copied to a local variable, 
  67. -- then removed from the #stack.  Information concerning the current marker
  68. -- is appended to the #forward list, so that users can subsequently retrace
  69. -- their steps.
  70.  
  71. -- TROUBLE-SHOOTING
  72. -- Symptom: When you use the button, a dialog opens asking 
  73. --          "Where is <movieName>"
  74. -- The behavior stores the target movie in the form of a relative path name.
  75. -- If you move either the current movie or the target movie, or if you rename
  76. -- the target movie, the behavior will subsequently contain invalid path data.
  77. -- Re-open the Behavior Parameters dialog, relocate your target movie and 
  78. -- click OK.
  79.  
  80.  
  81.  
  82. -- HISTORY --
  83.  
  84. -- 10 September 1998: written for the D7 Behaviors Palette by James Newton
  85. -- 22 October 1998:   "play"/"go to" added, choice of movie now made via fileIO
  86. --                    #graphic used instead of #member in getPDL
  87. -- 3 November 1998:   all member-swapping removed (use Push Button behavior)
  88. --                    descriptions reworked
  89. --  5 January   2000: updated to D8 <km>
  90.  
  91.  
  92. -- PROPERTIES --
  93.  
  94. -- error checking:
  95. property getPDLError
  96. property myBehaviorName
  97. -- author-defined parameters:
  98. property myDistantMovie
  99. property myDistantMarker
  100. property myJumpMode
  101. property myReturn
  102.  
  103.  
  104. -- EVENT HANDLERS --
  105.  
  106. on beginSprite me
  107.   Initialize me
  108. end beginSprite
  109.  
  110.  
  111. on mouseUp me
  112.   Jump me
  113. end prepareFrame
  114.  
  115.  
  116.  
  117. -- CUSTOM HANDLERS --
  118.  
  119. on Initialize me -- SENT BY beginSprite
  120.   
  121.   -- Can't test markers until in distant movie, so remember behavior name
  122.   myBehaviorName = string (me)
  123.   delete word 1 of myBehaviorName
  124.   delete the last word of myBehaviorName
  125.   delete the last word of myBehaviorName
  126.   
  127.   -- Global variable
  128.   if myReturn then
  129.     global gNavigationButtonList -- Only declared if it is to be used
  130.     
  131.     if voidP (gNavigationButtonList) then
  132.       -- Initialize gNavigationButtonList
  133.       gNavigationButtonList = [#stack: [], #forward: [], #index: []]
  134.     else -- Is it the right global?
  135.       if gNavigationButtonList.ilk <> #propList then
  136.         errorAlert (me, #invalidGlobal, gNavigationButtonList)
  137.       else if not gNavigationButtonList.findPos(#stack) then
  138.         errorAlert (me, #invalidGlobal, gNavigationButtonList)
  139.       else if not gNavigationButtonList.findPos(#index) then
  140.         errorAlert (me, #invalidGlobal, gNavigationButtonList)
  141.       else if not gNavigationButtonList.findPos(#forward) then
  142.         errorAlert (me, #invalidGlobal, gNavigationButtonList)
  143.       end if
  144.     end if
  145.   end if
  146.   -- End of error checking
  147.   
  148.   case myDistantMarker of
  149.     EMPTY, " ": myDistantMarker = 0
  150.     otherwise
  151.       -- Must be in myDistantMovie to know if myDistantMarker is a valid name
  152.   end case
  153. end Initialize
  154.  
  155.  
  156. on Jump me -- Sent by mouseUp
  157.   
  158.   currentMarker = [#frame: marker (0), #movie: the movieName]
  159.   
  160.   if myReturn then
  161.     -- Remember where to come back to
  162.     global gNavigationButtonList -- Only declared if it is to be used
  163.     
  164.     -- Add to #stack
  165.     gNavigationButtonList.stack.append(currentMarker)
  166.     -- Check if currentMarker is already in #index
  167.     if not gNavigationButtonList.index.getPos(currentMarker) then
  168.       gNavigationButtonList.index.append(currentMarker)
  169.     end if
  170.     -- Empty #forward list
  171.     gNavigationButtonList.forward = []
  172.   end if
  173.   
  174.   -- Jump to chosen frame
  175.   if myJumpMode = "Go to" then
  176.     go marker (myDistantMarker) of movie myDistantMovie
  177.   else
  178.     play marker (myDistantMarker) of movie myDistantMovie  
  179.   end if
  180.   -- Retrospective error check
  181.   if the movieName = myDistantMovie then
  182.     if the frameLabel <> myDistantMarker then
  183.       ErrorAlert (me, #invalidMarker, currentMarker)
  184.     end if
  185.   end if
  186.   -- End of retrospective error check
  187. end Jump
  188.  
  189.  
  190. on substituteStrings(me, parentString, childStringList) --------------
  191.   -- Sent by errorAlert
  192.   -- 
  193.   -- * Modifies parentString so that the strings which appear as
  194.   --   properties in childStringList are replaced by the values
  195.   --   associated with those properties.
  196.   --
  197.   -- <childStringList> has the format ["^1": "replacement string"]
  198.   --------------------------------------------------------------------
  199.   
  200.   i = childStringList.count()
  201.   repeat while i
  202.     tempString = ""
  203.     dummyString  = childStringList.getPropAt(i)
  204.     replacement  = childStringList[i]
  205.     lengthAdjust = dummyString.char.count - 1
  206.     repeat while TRUE
  207.       position = offset(dummyString, parentString)
  208.       if not position then
  209.         parentString = tempString&parentString
  210.         exit repeat
  211.       else
  212.         if position <> 1 then
  213.           tempString = tempString&parentString.char[1..position - 1]
  214.         end if
  215.         tempString = tempString&replacement
  216.         delete parentString.char[1..position + lengthAdjust]
  217.       end if
  218.     end repeat
  219.     i = i - 1
  220.   end repeat
  221.   
  222.   return parentString
  223. end substituteStrings 
  224.  
  225.  
  226.  
  227. -- ERROR CHECKING __
  228.  
  229. on errorAlert me, theError, data
  230.   -- sent by getPropertyDescriptionList, Initialize
  231.   -- Determine the behavior's name
  232.   behaviorName = string (me)
  233.   delete word 1 of behaviorName
  234.   delete the last word of behaviorName
  235.   delete the last word of behaviorName
  236.   -- Convert #data to useful value
  237.   case data.ilk of
  238.     #void: data = "<void>"
  239.     #symbol: data = "#"&data
  240.   end case
  241.   
  242.   case theError of
  243.  
  244.     #getPDL_Invalid:      
  245.       tError1 = "BEHAVIOR ERROR: Frame ^0, Sprite ^1"
  246.       tError1 = substituteStrings(me, tError1, ["^0":the frame, "^1": the currentSpriteNum])      
  247.       tError2 = "Parameters for behavior ^0 have not been correctly set. " & \
  248.     "Select a valid movie name in the Behavior Parameters dialog."
  249.       tError2 =  substituteStrings(me, tError2, ["^0":myBehaviorName])      
  250.       tError3 = "Current movie = ^0"
  251.       tError3 = substituteStrings(me, tError3, ["^0":data])
  252.       alert(tError1 & RETURN & RETURN & tError2 & RETURN & RETURN & tError3)      
  253.       halt
  254.       
  255.     #invalidGlobal:   
  256.       tError1 = "BEHAVIOR ERROR: Frame ^0, Sprite ^1"
  257.       tError1 = substituteStrings(me, tError1, ["^0":the frame, "^1": the currentSpriteNum])     
  258.       tError2 = "Behavior ^0 requires a global gNavigationButtonList with the following" & RETURN & \
  259.     " structure:"
  260.       tError2 =  substituteStrings(me, tError2, ["^0":myBehaviorName])   
  261.       tError3 = "[#stack [...], #index: [...], #forward: [...]]"
  262.       tError4 = "Current value = ^0"
  263.       tError4 = substituteStrings(me, tError4, ["^0":data])  
  264.       alert(tError1 & RETURN & RETURN & tError2 & RETURN & RETURN & tError3 & RETURN & RETURN & tError4)          
  265.       abort
  266.       
  267.     #invalidMarker:
  268.       if the runMode = "Author" then
  269.         put RETURN & the labelList        
  270.         tError1 = "BEHAVIOR ERROR: ^0, Sprite ^1"
  271.         tError1 = substituteStrings(me, tError1, ["^0":data, "^1": the currentSpriteNum])                  
  272.         tError2 = "Behavior ^0"
  273.         tError2 =  substituteStrings(me, tError2, ["^0":myBehaviorName])                   
  274.         tError3 = "There is no marker ^0 in movie ^1. " & \
  275.     "Enter a valid marker (see Message Window) in the Behavior Parameters dialog."        
  276.         tError3 =  substituteStrings(me, tError3, ["^0":QUOTE & myDistantMarker & QUOTE, "^1":myDistantMovie])   
  277.         alert(tError1 & RETURN & RETURN & tError2 & RETURN & RETURN & tError3)        
  278.       end if         
  279.   end case
  280. end errorAlert
  281.  
  282.  
  283. -- AUTHOR-DEFINED PARAMETERS --
  284.  
  285.  
  286. on isOKToAttach (me, aSpriteType, aSpriteNum)
  287.   return aSpriteType = #graphic
  288. end on
  289.  
  290.  
  291. on getPropertyDescriptionList me
  292.   
  293.   if not the currentSpriteNum then exit
  294.   
  295.   return \
  296. [ \
  297.  #myDistantMovie: \
  298.  [ \
  299.   #comment: "On mouseUp, go to movie" & RETURN & \
  300.             "(Include path if necessary)", \
  301.   #format:  #string, \
  302.   #default: "Type the name of your movie here" \
  303.  ], \
  304.  #myDistantMarker: \
  305.  [ \
  306.   #comment: "Marker in the other movie (optional)", \
  307.   #format:  #string, \
  308.   #default: " " \
  309.   ], \
  310.  #myJumpMode: \
  311.  [ \
  312.   #comment: "Jump Mode", \
  313.   #format:  #string, \
  314.   #range:  ["Go to", \
  315.             "Play and Return"], \
  316.   #default: "Go to" \
  317.  ], \
  318.  #myReturn: \
  319.  [ \
  320.   #comment: "Remember current marker for Back button?", \
  321.   #format:  #boolean, \
  322.   #default:  TRUE \
  323.  ] \
  324. ]
  325. end getPropertyDescriptionList
  326.